package com.tanhua.common.utils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName: RandomIndexUtil
 * @Author:王晨晗
 * @Description: 获取不重复的随机数
 * @Date: 2022/01/07/10:33
 */
public class RandomIndexUtil {

    private RandomIndexUtil(){}


    /**
     * @description  采用set集合存放随机数(值不重复)
     * @param min       最小值
     * @param max       最大值
     * @param n         随机数个数
     * @return
     */
    private static void randomSet(int min, int max, int n , HashSet<Integer> set) {
        //当随机个数大于最大数范围,获取最小值大于最大值,返回
        if (n > (max - min + 1) || max < min) {
            return;
        }
        //遍历随机个数
        for (int i = 0; i < n; i++) {
            // 调用Math.random()方法
            int num = (int) (Math.random() * (max - min)) + min;
            set.add(num);// 将不同的数存入HashSet中
        }
        int setSize = set.size();
        // 如果存入的数小于指定生成的个数，则调用递归再生成剩余个数的随机数，如此循环，直到达到指定大小
        if (setSize < n) {
            randomSet(min, max, n - setSize, set);// 递归
        }
    }

    /**
     * @description 获取指定随机数
     * @param min   最小值
     * @param max  最大值
     * @param n  随机个数
     * @return
     */
    public static List<Integer> getRandomIndexList(int min, int max, int n){
        HashSet<Integer> set = new HashSet<>();
        randomSet(min, max, n, set);
        List<Integer> list = new ArrayList<>(set);
        return list;
    }
}
